const { DataTypes } = require("sequelize");
const { sequelize } = require("../sequelize");
const User = require("./user");
const Article = require("./article");
/* 
1. 表名推断
    默认情况下,当未提供表名时,Sequelize 会自动将模型名复数并将其用作表名.
*/
const Collect = sequelize.define(
  "Collect",
  {
    // 在这里定义模型属性

    id: {
      //主键
      type: DataTypes.INTEGER,
      autoIncrement: true,
      primaryKey: true,
    },
    isCollect: {
      type: DataTypes.TINYINT,
      defaultValue: 0,
    },
    collectTime:{
        type:DataTypes.DATE,
        defaultValue: DataTypes.NOW
    },
    uid: {
      // 用户id
      type: DataTypes.INTEGER,
    //   references: {
    //     model: User, // 'Actors' 也可以使用
    //     key: "id",
    //   },
    },

    articleId: {
      // 文章id
      type: DataTypes.INTEGER,
    //   references: {
    //     model: Article, // 'Actors' 也可以使用
    //     key: "id",
    //   },
    },
  },
  {
    indexes: [{ fields: ["uid"] },{  fields: ["articleId"] }],//sync({alter: true}) throws "Too many keys specified" #9653； 解决该报错
    // 这是其他模型参数
    // freezeTableName: true,//强制表名等于模型名,全局已配置
  }
);

// Collect.sync({ alter: true }).then(() => {
//   console.log("用户模型表刚刚(重新)创建！");
// });
// `sequelize.define` 会返回模型
(async () => {
  await sequelize.sync({alter:true});
  console.log("数据模型同步成功");
})();

// Article.belongsToMany(User, { through: Collect });
// User.belongsToMany(Article, { through: Collect });

// Collect.create({name:'随笔',})

console.log(Collect === sequelize.models.Collect); // true

module.exports = Collect;
